"""
数据处理计算
==============================================================================================
reduceByKey算子

针对 KV型 RDD，自动按照 key 分组，然后根据你提供的聚合逻辑，完成组内(value)的聚合操作

==============================================================================================
用法

rdd.reduceByKey(func)
# func: (V, V) -> V
# 接收两个入参、类型一致，返回一个返回值，类型和传入参数一致

"""

# 演示RDD的flatMap成员方法的使用
from pyspark import SparkConf, SparkContext
# windows 中 spark 找不到对于的 python 解释器会报错
import os

os.environ["PYSPARK_PYTHON"] = "D:/python3.11/python.exe"

conf = SparkConf().setMaster("local[*]").setAppName("test_spark")
sc = SparkContext(conf=conf)

# 准备一个RDD
rdd = sc.parallelize([("a", 1), ("a", 1), ("b", 1), ("b", 1), ("b", 1)])

result = rdd.reduceByKey(lambda x, y: x + y)
print(result.collect())


rdd = sc.parallelize([("男", 99), ("男", 88), ("女", 99), ("女", 77)])

result = rdd.reduceByKey(lambda x, y: x + y)
print(result.collect())
